После выполнения команды мы имеем некоторые данные в виде таблицы. Эту таблицу надо исследовать на предмет колонок и типов их.
//Группа переменных для получения данных о таблицы IColumnsInfo* pIColumnsInfo;
Мы должны запросить интерфейс, который умеет получать информацию о колонках.
// получаем данные о таблице
hr=pIRowset->QueryInterface(IID_IColumnsInfo, (void**)&pIColumnsInfo);
if (FAILED(hr))
{
pIRowset->Release();
cout << "Error GetInfo Tables" << endl;
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
CoUninitialize();
return;
}
IColumnsInfo это интерфейс, который позволяет нам получить информацию относительно полученных данных. Его можно запросить у интерфейса IRowset который этими данными и владеет. У этого интерфейса есть метод, который возвращает колонку и называется он GetColumnInfo.
HRESULT GetColumnInfo ( ULONG * pcColumns, //количество колонок DBCOLUMNINFO ** prgInfo, //массив структур с информацией о колонках OLECHAR ** ppStringsBuffer //массив структур для хранения строковых значений );
Давайте попробуем? Надо добавить переменные.
//Группа переменных для получения данных о таблице IColumnsInfo* pIColumnsInfo; ULONG nCols;DBCOLUMNINFO* pColumnsInfo = NULL; OLECHAR* pColumnStrings = NULL;
И получить информацию.
// получаем данные о таблице
hr=pIRowset->QueryInterface(IID_IColumnsInfo, (void**)&pIColumnsInfo);
if (FAILED(hr))
{
pIRowset->Release();
cout << "Error GetInfo Tables" << endl;
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
CoUninitialize();
return;
}
hr = pIColumnsInfo->GetColumnInfo(&nCols, &pColumnsInfo,&pColumnStrings);
if (FAILED(hr))
{
cout << "Error GetColumnInfo" << endl;
pIRowset->Release();
pIColumnsInfo->Release();
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
CoUninitialize();
return;
}
cout << nCols << endl;
pIRowset->Release();
pIColumnsInfo->Release();
pIDBInitialize->Uninitialize();
pIDBInitialize->Release();
// Деинициализация COM
CoUninitialize();
}
На экране Вы должны увидеть число 4 так как мы и запрашивали в SQL операторе.
LPCOLESTR wSQLString = OLESTR("SELECT CompanyName,City, Phone, Fax FROM Customers ORDER BY CompanyName, City");

Но ведь мы могли и не задать, если бы использовали * вместо имен колонок.